/*
 * @Author: wangshuixin 2412658453@qq.com
 * @Date: 2024-09-19 12:29:08
 * @LastEditors: wangshuixin 2412658453@qq.com
 * @LastEditTime: 2024-12-20 12:53:56
 * @FilePath: \tspods\types\equation.ts
 * @Description: 组成标准方程的元素的类型 - 化为最简形式
 */

/**
 * 表达式显示的单个分割内容
 * @param {string} text 常量/变量 >>> 数字、字母、左右小括号“()”、等于号“=”、空字符''代表分数分子的开头，'\n'代表分子的结尾和分母的开头，'/'代表分母的结尾
 * @abstract 表达式的构建原则：从左到右，从上到下。
 * @attention 优先级：上下优先级（分数线） > 左右优先级（分数 + 任意值）
*/
export interface VariableTermElement {
  text?: string,
  top?: string, // 上标
  bottom?: string, // 下标（注意：数字不能有下标）
  type?: string // 一个项中某个组成元素的 “局部符号”（其元素的正负，由“局部符号” 与 “整体符号”共同决定） 1：加 2：减 3：乘 4：除（未填写type或类型错误，则默认为乘）
}

/**
 * 表达式的项
 * @param {string} constant 常数
 * @param {string} variable 变量
 * @param {string} type 1：加 2：减 3：乘 4：除（未填写type或类型错误，则默认为乘）
 * @attention 表达式的项遵循的规则：能合并到一个项，则合并。否则将会在提取分子、分母时出异常。
*/
export interface ExpressionTerm {
  constant?: VariableTermElement[]
  variable?: VariableTermElement[]
  type?: string // 一个完整的项的 “整体符号” 1：加 2：减 3：乘 4：除（未填写type或类型错误，则默认为乘）
  [property: string]: any
}

/**
 * 分数（用于表达式显示）
 * @param {ExpressionTerm} top 分子
 * @param {ExpressionTerm} bottom 分母
 * @param {string} type 分数的符号
 * @attention 优先级：上下优先级（分数线） > 左右优先级（分数 + 任意值）
*/
export interface FractionTerm {
  top?: VariableTermElement[],
  bottom?: VariableTermElement[],
  type?: string // 1：加 2：减 3：乘 4：除（未填写type或类型错误，则默认为乘）
  [property: string]: any
}
